package cn.lg.soar.core.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 缓存注解（用于替换 spring@CacheEvict，支持多租户）
 * @author luguoxiang
 * @date 2022/6/27
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SoarCacheEvict {

    /**
     * 缓存名称
     */
    String value();

    /**
     * 缓存key，el表达式
     */
    String key() default "";

    /**
     * 是否区分租户
     * @return
     */
    boolean enabledTenant() default true;

    /**
     * 删除全部缓存
     * @return
     */
    boolean allEntries() default false;

    /**
     * 删除策略
     */
    Strategy strategy() default Strategy.DOUBLE;

    enum Strategy {
        /**
         * 方法执行前删除
         */
        BEFORE,

        /**
         * 方法执行后删除
         */
        AFTER,

        /**
         * 方法执行前后都执行删除
         */
        DOUBLE,
    }
}
